本文同步發表於小弟自架網站:微確幸資訊站
本文為網友於ithelp發問之解答:
網友有n個excel檔案,每個檔案中都有time、X、Y、Z工作表。
網友想要把每個excel檔案中「相同名稱」的工作表讀出來,並整合成同一個dataframe,
然後再來做後續的處理。
import pandas as pd
import os
path = os.getcwd()
# List files:
files = os.listdir(path)
print(files)
files_xlsx = [f for f in files if f[-4:] == "xlsx"]
files_xls = [f for f in files if f[-3:] == "xls"]
files_xls.extend(files_xlsx)
for i, element in enumerate(files_xls):
print(i, element)
print(len(files_xls))
print(files_xls)
['.ipynb_checkpoints', '1.xlsx', '2.xlsx', '3.xlsx', 'Untitled.ipynb']
0 1.xlsx
1 2.xlsx
2 3.xlsx
3
['1.xlsx', '2.xlsx', '3.xlsx']
import warnings
sh_list = ['time', 'X', 'Y', 'Z']
for s in sh_list:
df = pd.DataFrame()
print(f'工作表變數:{s}')
for f in files_xls:
data = pd.read_excel(f, sheet_name=s)
warnings.simplefilter("ignore") #不顯示讀檔驗證警告
print(f'檔案名稱:{f},工作表{s}的原始資料筆數:{len(data)}')
df = df.append(data, ignore_index=True) # 將所有檔案中相同名稱的工作表dataframe合併
print(f'dataframe_{s}的總資料筆數:{len(df)}')
exec('{} = df.copy()'.format('df_'+s)) # 將合併好的工作表dataframe存到一個新的名稱如df_time
工作表變數:time
檔案名稱:1.xlsx,工作表time的原始資料筆數:224
檔案名稱:2.xlsx,工作表time的原始資料筆數:475
檔案名稱:3.xlsx,工作表time的原始資料筆數:469
dataframe_time的總資料筆數:1168
工作表變數:X
檔案名稱:1.xlsx,工作表X的原始資料筆數:224
檔案名稱:2.xlsx,工作表X的原始資料筆數:475
檔案名稱:3.xlsx,工作表X的原始資料筆數:469
dataframe_X的總資料筆數:1168
工作表變數:Y
檔案名稱:1.xlsx,工作表Y的原始資料筆數:224
檔案名稱:2.xlsx,工作表Y的原始資料筆數:475
檔案名稱:3.xlsx,工作表Y的原始資料筆數:469
dataframe_Y的總資料筆數:1168
工作表變數:Z
檔案名稱:1.xlsx,工作表Z的原始資料筆數:224
檔案名稱:2.xlsx,工作表Z的原始資料筆數:475
檔案名稱:3.xlsx,工作表Z的原始資料筆數:469
dataframe_Z的總資料筆數:1168
print(len(df_time))
df_time.head()
1168
0 | 1 | |
---|---|---|
0 | 0 | nan |
1 | 0 | nan |
2 | 0 | nan |
3 | 0 | nan |
4 | 0 | nan |
print(len(df_X))
df_X.ilco[:, :3]head()
1168
0.04102 | -0.10547 | -0.1748 | |
---|---|---|---|
0 | -0.41943 | -0.10059 | 0.20605 |
1 | 0.05176 | 0.00586 | -0.03516 |
2 | -0.70557 | -0.48193 | -0.12988 |
3 | 0.05127 | -0.2793 | -0.35889 |
4 | 0.03027 | -0.59082 | -0.97949 |
print(len(df_Y))
df_Y.ilco[:, :3]head()
1168
-0.15186 | -0.25 | -0.26367 | |
---|---|---|---|
0 | -0.23535 | 0.28613 | 0.49023 |
1 | -0.24512 | -0.16797 | -0.06836 |
2 | 0.16846 | 0.25098 | 0.11035 |
3 | 0.24561 | 0.35889 | 0.19336 |
4 | -0.16406 | -0.15771 | -0.09717 |
print(len(df_Z))
df_Z.ilco[:, :3]head()
1168
-0.021 | 0.05566 | 0.05078 | |
---|---|---|---|
0 | 0.31445 | 0.10303 | -0.21191 |
1 | 0.10693 | -0.03516 | 0.021 |
2 | -0.06006 | -0.10205 | -0.06689 |
3 | -0.14209 | -0.2915 | -0.09131 |
4 | -0.23535 | -0.2041 | -0.08936 |